package com.gupaoedu.pattern.singleton.lazy;

/**
 * 2019/5/10
 * created by chenpp
 */
/**
 * 懒汉式单例
 * (内部类形式)
 * 优点:线程安全并且不会造成内存浪费
 * 使用static 修饰内部类，是为了将instance作为全局共享变量
 * 注意:在使用getInstance()的时候,在返回结果之前会先加载内部类,如果不使用的话是不会加载内部类的
 * 还有在static方法的上加上关键词final 保证方法不被重写重载
 *
 * */
public class LazyInnerClassSingleton {

    private LazyInnerClassSingleton(){
        if( Singleton.instance!=null){
            throw new RuntimeException("单例模式下不允许构造多个实例!");
        }
        System.out.println("初始化单例");
    }
    public static LazyInnerClassSingleton getInstance(){
        return Singleton.instance;
    }
    public static class Singleton{
        private Singleton(){
            System.out.println("初始化内部类");
        }
        private static LazyInnerClassSingleton instance = new LazyInnerClassSingleton();
    }


}
